这篇文章记录我在 Debian 12(4GB 内存 + 2GB SWAP) 上落地的一套「防卡死 / 保命」加固方案:为
sshd 提供更高的生存优先级、用 SWAP 做缓冲、用 earlyoom 进行提前抢救,并用 内核 Panic + systemd Watchdog 作为最终兜底,尽量把“只能重装”的事故变成“自动恢复”。我之所以这么折腾,是因为用的是“白嫖/低价”机器:很多时候 登不上厂商后台,也没法远程 SSH / 重启 / 重装。一旦系统 OOM 或死锁卡死,SSH 断掉就等于直接失联;所以这套方案的目标只有一个:让机器尽可能自愈,至少把 SSH 留住。
适用场景:小内存 VPS、偶发 OOM / 假死、需要尽量保证 SSH 不被杀,以及系统死锁时希望自动重启自愈。说明:以下均为系统级配置(不依赖 Docker)。
快速总结
sshd:OOMScoreAdjust=-1000,尽量避免被 OOM 干掉
swap:2GB swap +vm.swappiness=10,给系统留缓冲
earlyoom:内存 ≤ 4% 且 swap ≤ 5% 触发清理,豁免sshd/1panel
panic + watchdog:彻底死锁时 60 秒后硬重启自愈
第一部分:核心通道 —— SSHD 高优先级与资源保障
直接修改系统自带的 SSH 服务配置,赋予其最高 OOM 免死金牌和实时 CPU 抢占权。
1)编辑 ssh.service
在
[Service] 节点下追加以下 5 行参数:保存退出后,重载并重启 SSH 服务:
第二部分:缓冲层 —— 创建与挂载 2GB SWAP 分区
在物理内存和崩溃之间架起安全气囊,同时设置合理的
swappiness 减少磁盘磨损。第三部分:安全打手 —— 配置 earlyoom 预警抢救守护
在内存濒死(内存 ≤ 4% 且 SWAP ≤ 5%)时精准清理吃内存大户,同时严格豁免
sshd 和 1panel。第四部分:终极兜底 —— 内核 Panic 与 Systemd 硬件看门狗(Watchdog)
在系统彻底死锁、无法通过软件挽救时,提供 60 秒后的硬重启自愈机制。
1)配置内核级崩溃自动重启
2)挂载内核软狗模块(softdog)
3)配置 systemd 全局看门狗
找到并取消注释(或直接追加)以下两行:
保存退出后,重载使看门狗正式生效:
🔍 一键验证脚本(检查是否全部生效)
预期检查结果应该长什么样?
不同机器的内存数值、PID、时间戳会不一样;你主要核对 关键字段是否对。
判定标准
看到这些就说明配置基本到位:
- sshd:输出必须是
-1000(否则说明 OOM 豁免没生效)
- swap:
Swap: 2.0Gi且free也接近2.0Gi(刚启用时常见为 0 使用)
- earlyoom:状态为
active (running),命令行参数里能看到-m 4 -s 5 --avoid "(^|/)(sshd.*|1panel)" -r 3600
- watchdog:
/dev/watchdog存在(字符设备crw-------),kernel.panic=60与vm.panic_on_oom=1正确
📝 小结
这套方案不是为了让小内存 VPS 变成高配机器,而是为了在内存吃紧、服务异常、系统假死时尽量争取恢复窗口:先保住 SSH,再用 SWAP 缓冲,再让 earlyoom 提前清理,最后用 Panic 和 Watchdog 做硬兜底。
对于没有稳定控制台、无法随时重启或重装的低价机器来说,这种“保命配置”能把很多原本只能手动救援的事故,变成系统自动恢复。
上一篇
OpenWrt 下 OpenClash 完美配合 Cloudflare Tunnel 直连配置指南
下一篇
用 Docker 部署 Tailscale DERP,并用 NPM 反代 + 伪装(端口安全策略)
- 作者:Cheng
- 链接:https://0rz.li/Linux%20%E8%BF%90%E7%BB%B4/debian12-vps-oom-ssh-swap-earlyoom-watchdog
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。



